package com.ruoyi.base;
//静态代码块:在java中使用static关键字声明的代码块。
// 静态块用于初始化类，为类的属性初始化。
// 每个静态代码块只会执行一次。
// 由于JVM在加载类时会执行静态代码块，所以静态代码块先于主方法执行。
//如果类中包含多个静态代码块，那么将按照"先定义的代码先执行，后定义的代码后执行"。
//注意：
// 1 静态代码块不能存在于任何方法体内。
// 2 静态代码块不能直接访问静态实例变量和实例方法，需要通过类的实例对象来访问。
class Code {
    {
        System.out.println("Code 的构造块");
    }
    static {
        System.out.println("Code 的静态代码块");
    }
    public Code() {
        System.out.println("Code 的构造方法");
    }
}

/**
 * ClassLoadSort 的静态代码块
 * ClassLoadSort 的主方法
 * 第一次创建 Code 对象
 * Code 的静态代码块
 * Code 的构造块
 * Code 的构造方法
 * 第二次创建 Code 对象
 * Code 的构造块
 * Code 的构造方法
 * 第一次创建 ClassLoadSort 对象
 * ClassLoadSort 的构造块
 * ClassLoadSort 的构造方法
 * 第二次创建 ClassLoadSort 对象
 * ClassLoadSort 的构造块
 * ClassLoadSort 的构造方法
 * */
public class ClassLoadSort {
    { System.out.println("ClassLoadSort 的构造块"); }
    static { System.out.println("ClassLoadSort 的静态代码块"); }
    public ClassLoadSort() {
        System.out.println("ClassLoadSort 的构造方法");
    }
    public static void main(String[] args) {
        System.out.println("ClassLoadSort 的主方法");
        System.out.println("第一次创建 Code 对象");
        new Code();
        System.out.println("第二次创建 Code 对象");
        new Code();
        System.out.println("第一次创建 ClassLoadSort 对象");
        new ClassLoadSort();
        System.out.println("第二次创建 ClassLoadSort 对象");
        new ClassLoadSort();
    }
}